/*
jeu.c
-----

Issa

Rôle : fonctions du jeu.
*
* commentaire :
* réglé le probléme du passage a travers les murs
*/

 
#include "allInclude.h"
		

void deplacer_Mario(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
    positionJoueur *marioPosition;
    marioPosition = (positionJoueur*)data;
    Evas_Object  *vide, *objectif,*victoire;
    Evas_Coord dx, dy,dxCaisse,dyCaisse;
    Evas_Event_Key_Down *event;

    event = (Evas_Event_Key_Down *)event_info;

    //mouvement de mario
    evas_object_geometry_get(obj, &dx, &dy, NULL, NULL);//récupére la taille de l'image pour le déplacement

    //mouvement de la caisse
    evas_object_geometry_get(marioPosition->caisse, &dxCaisse, &dyCaisse, NULL, NULL);
    
     
	 if ( !strcmp(event->keyname, "Escape") )
    {
        free(marioPosition);
      ecore_main_loop_quit();
    }
    if (marioPosition->objectif <= 0 )
    {
    	victoire = victory(victoire,e);
    	   evas_object_show (victoire); 
        printf("\n\n\n\n\n\n\n\nSuccesssss!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
       free(marioPosition);
        //ecore_main_loop_quit();
    } else {


        if ( !strcmp(event->keyname, "r") )
    {
    //	 free(marioPosition);
    	//jouer(marioPosition->ecran,e,obj);
    }
    
    if ( !strcmp(event->keyname, "n") )
    {
        marioPosition->objectif =  marioPosition->objectif - 1;
        printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
    }

    else if (!strcmp(event->keyname, "Right")) //droite
    {
        evas_object_image_file_set ( marioPosition->mario, "../imgs/mario_droite.gif", NULL);
        if (marioPosition->positionJoueurX  <= LARGEUR_FENETRE)  // Si le joueur dépasse l'écran, on arrête
        {
            if  (marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] != MUR)// S'il y a un mur, on arrête
            {
                if (marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] == CAISSE && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] != CAISSE  && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] != CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] != MUR && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] >= 0 )// si il y aune caisse Normale
                {
                    if ( marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] == OBJECTIF)// si aprés une caisse normale y a un objectif
                    {
                        printf("Transforme une caisse normale en caisse_ok <-------------------------------------------\n");
                        marioPosition->objectif--;
                        //   printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
                        //                  printf("UNE caisse Deplacé  à droite\n");
                        dx =  dx + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX+2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse - TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  += 1;
                        //printf("position dx : %d\n", dx);

                    }
                    else // permet de déplacer les caisse normale avec rien dériere
                    {
                        //  printf("UNE caisse Deplacé  à droite\n");
                        dx =  dx + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX+2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse - TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  += 1;
                        printf("position dx : %d\n", dx);
                    }

                }
                else if ( marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] == CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] != MUR && marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] >= 0)
                {
                    if (marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] == OBJECTIF) // si dériere la caisse il y a un autre objectif
                    {
                        printf("Transforme une caisse OK en caisse OK\n");
                        //   printf("UNE caisse Deplacé  à droite d'une caisse OK\n");

                        dx =  dx + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX+2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        objectif = objectifMove(objectif,e,dxCaisse - TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  += 1;
                        //printf("position dx : %d\n", dx);
                    }
                    else // si il y a rien dériere la caisse ok
                    {
                        printf("Transforme une caisse OK en caisse normale \n");

                        marioPosition->objectif++;
                        dx =  dx + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX+2][marioPosition->positionJoueurY] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX+2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        objectif = objectifMove(objectif,e,dxCaisse - TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  += 1;
                        //printf("position dx : %d\n", dx);
                    }

                }
                else if (marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX+1][marioPosition->positionJoueurY] != CAISSE_OK) //si pas de caisse on avance
                {
                    printf("Dans Ni Caisse Normale Ni caisse OK<-------------------------------------------\n");
                    marioPosition->positionJoueurX  += 1;
                    dx =  dx + TAILLE_BLOC;
                    evas_object_move ( marioPosition->mario, dx, dy);
                    //printf("position dx  : %d\n", dx);
                }
            }
        }
    }
    else if (!strcmp(event->keyname, "Left")) // gauche
    {
        evas_object_image_file_set ( marioPosition->mario, "../imgs/mario_gauche.gif", NULL);
        if (marioPosition->positionJoueurX  > 0)  // Si le joueur dépasse l'écran, on arrête
        {
            if  (marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] != MUR)// S'il y a un mur, on arrête
            {
                if (marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] == CAISSE && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] != CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] != MUR && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] >= 0 )// si il y aune caisse Normale
                {
                    if ( marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] == OBJECTIF)// si aprés une caisse normale y a un objectif
                    {
                        printf("Transforme une caisse normale en caisse_ok <-------------------------------------------\n");
                        marioPosition->objectif--;
                        //   printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
                        //                  printf("UNE caisse Deplacé  à droite\n");
                        dx =  dx - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX-2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse + TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  -= 1;
                        //printf("position dx : %d\n", dx);

                    }
                    else // permet de déplacer les caisse normale avec rien dériere
                    {
                        //  printf("UNE caisse Deplacé  à droite\n");
                        dx =  dx - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);

                        marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX-2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse + TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  -= 1;
                        printf("position dx : %d\n", dx);
                    }

                }
                else if ( marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] == CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] != MUR && marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] >= 0)
                {
                    if (marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] == OBJECTIF) // si dériere la caisse il y a un autre objectif
                    {
                        printf("Transforme une caisse OK en caisse OK\n");


                        dx =  dx - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX-2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        objectif = objectifMove(objectif,e,dxCaisse + TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  -= 1;
                        //printf("position dx : %d\n", dx);
                    }
                    else // si il y a rien dériere la caisse ok
                    {
                        printf("Transforme une caisse OK en caisse normale \n");

                        marioPosition->objectif++;
                        dx =  dx - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX-2][marioPosition->positionJoueurY] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX-2) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY) * TAILLE_BLOC;
                        objectif = objectifMove(objectif,e,dxCaisse + TAILLE_BLOC,dyCaisse);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurX  -= 1;
                        //printf("position dx : %d\n", dx);
                    }

                }
                else if (marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX-1][marioPosition->positionJoueurY] != CAISSE_OK) //si pas de caisse on avance
                {
                    printf("Dans Ni Caisse Normale Ni caisse OK<-------------------------------------------\n");
                    marioPosition->positionJoueurX  -= 1;
                    dx =  dx - TAILLE_BLOC;
                    evas_object_move ( marioPosition->mario, dx, dy);
                    //printf("position dx  : %d\n", dx);
                }
            }
        }
    }
    else if (!strcmp(event->keyname, "Up"))
    {
        evas_object_image_file_set ( marioPosition->mario, "../imgs/mario_haut.gif", NULL);
        // Si le joueur dépasse l'écran, on arrête
        if (marioPosition->positionJoueurY  > 0)
        {
            //// S'il y a un mur, on arrête
            if  (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] != MUR)
            {
                // si il y a une caisse et pas caisse + caisse et pas caisse + fin écran et pas caisse + mur
                if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] == CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] != CAISSE_OK&& marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] != CAISSE  && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] != MUR)// si il y aune caisse
                {
                    //si aprés la caisse on a un objectif on transforma la caisse en caisse_ok
                    if ( marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] == OBJECTIF)
                    {
                        marioPosition->objectif--;
                        printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
                        printf("UNE caisse Deplacé  à haut\n");
                        dy =  dy - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY-2) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse,dyCaisse + TAILLE_BLOC);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);

                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  -= 1;
                        printf("position dx : %d\n", dx);
                    }
                    else  //Déplace la caisse normale en tout ciconstance
                    {
                        printf("UNE caisse Deplacé  à haut\n");
                        dy =  dy - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY-2) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse,dyCaisse + TAILLE_BLOC);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);

                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  -= 1;
                        printf("position dx : %d\n", dx);
                    }
                }
                //si il y a une caisse_ok et pas caisse_ok + caisse et pas caisse_ok + caisse et pas caisse_ok + fin écran et pas caisse + mur
                else if ( marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] == CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] != CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] != MUR && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] >= 0)
                {
                	//// si on a un objectif derriere la caisse_ok
                    if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] == OBJECTIF) 
                    {
                        
                        printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
                        printf("UNE caisse Deplacé  à haut\n");
                        dy =  dy - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY-2) * TAILLE_BLOC;
                        objectif = objectifMove(vide,e,dxCaisse,dyCaisse + TAILLE_BLOC);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);

                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  -= 1;
                        printf("position dx : %d\n", dx);
                    }
                    else // si il y a rien dériere la caisse ok
                    {
                        printf("Transforme une caisse OK en caisse normale \n");

                        marioPosition->objectif++;
                        dy =  dy - TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-2] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY-2) * TAILLE_BLOC;
                        objectif = objectifMove(objectif,e,dxCaisse ,dyCaisse+ TAILLE_BLOC);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  -= 1;
                        //printf("position dx : %d\n", dx);
                    }

                }
                // si il n 'y a ni caisse, ni caisse_ok on avance
                else if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY-1] != CAISSE_OK)//si pas de caisse on avance
                {
                    marioPosition->positionJoueurY  -= 1;
                    dy =  dy - TAILLE_BLOC;
                    evas_object_move ( marioPosition->mario, dx, dy);
                    printf("position dy : %d\n", dx);
                }
            }
        }
    }
    else if (!strcmp(event->keyname, "Down"))
    {
        evas_object_image_file_set (marioPosition->mario, "../imgs/mario_bas.gif", NULL);
        
        if (marioPosition->positionJoueurY  >= 0)
        {
            //// S'il y a un mur, on arrête
            if  (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] != MUR)
            {
                // si il y a une caisse et pas caisse + caisse et pas caisse + fin écran et pas caisse + mur
                if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] == CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] != CAISSE_OK  && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] != MUR)// si il y aune caisse
                {
                    //si aprés la caisse on a un objectif on transforma la caisse en caisse_ok
                    if ( marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] == OBJECTIF)
                    {
                        marioPosition->objectif--;
                        printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
                        printf("UNE caisse Deplacé  à haut\n");
                        dy =  dy + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY+2) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse,dyCaisse - TAILLE_BLOC);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);

                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  += 1;
                        printf("position dx : %d\n", dx);
                    }
                    else  //Déplace la caisse normale en tout ciconstance
                    {
                        printf("UNE caisse Deplacé  à haut\n");
                        dy =  dy + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY+2) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse,dyCaisse - TAILLE_BLOC);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);

                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  += 1;
                        printf("position dx : %d\n", dx);
                    }
                }
                //si il y a une caisse_ok et pas caisse_ok + caisse et pas caisse_ok + caisse et pas caisse_ok + fin écran et pas caisse + mur
                else if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] == CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] != CAISSE_OK && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] != MUR )
                {
                	//// si on a un objectif derriere la caisse_ok
                    if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] == OBJECTIF) 
                    {
                        marioPosition->objectif--;
                        printf("\n\nObjectif -------------> %d \n", marioPosition->objectif);
                        printf("UNE caisse Deplacé  à haut\n");
                        dy =  dy + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] = VIDE;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] = CAISSE_OK;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY+2) * TAILLE_BLOC;
                        vide = videMove(vide,e,dxCaisse,dyCaisse - TAILLE_BLOC);
                        marioPosition->caisse = caisseMoveOK(marioPosition->caisse,e,dxCaisse,dyCaisse);

                        evas_object_show (vide); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  += 1;
                        printf("position dx : %d\n", dx);
                    }
                    else // si il y a rien dériere la caisse ok
                    {
                        printf("Transforme une caisse OK en caisse normale \n");

                        marioPosition->objectif++;
                        dy =  dy + TAILLE_BLOC;
                        evas_object_move ( marioPosition->mario, dx, dy);
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] = OBJECTIF;
                        marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+2] = CAISSE;

                        dxCaisse = (marioPosition->positionJoueurX) * TAILLE_BLOC;
                        dyCaisse = (marioPosition->positionJoueurY+2) * TAILLE_BLOC;
                        objectif = objectifMove(objectif,e,dxCaisse ,dyCaisse - TAILLE_BLOC);
                        marioPosition->caisse = caisseMove(marioPosition->caisse,e,dxCaisse,dyCaisse);


                        evas_object_show (objectif); // remplace l'image de la caisse par du vide
                        evas_object_show (marioPosition->caisse);
                        evas_object_layer_set(marioPosition->mario,1); // permet d'avoir le mario au dessu des autres images
                        marioPosition->positionJoueurY  += 1;
                        //printf("position dx : %d\n", dx);
                    }

                }
                // si il n 'y a ni caisse, ni caisse_ok on avance
                else if (marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] != CAISSE && marioPosition->carte[marioPosition->positionJoueurX][marioPosition->positionJoueurY+1] != CAISSE_OK)//si pas de caisse on avance
                {
                    marioPosition->positionJoueurY  += 1;
                    dy =  dy + TAILLE_BLOC;
                    evas_object_move ( marioPosition->mario, dx, dy);
                    printf("position dy : %d\n", dx);
                }
            }
        }
    }}

}

void jouer(Ecore_Evas *ecran,Evas *evas,Evas_Object *o)
{
    printf("Jouer\n");

    positionJoueur *marioPosition;
    marioPosition = malloc(sizeof(positionJoueur));

    Evas_Object *mur,*caisse, *caisseOK = NULL, *objectif = NULL, *fondEcran;
   // marioPosition->ecran = ecran;
    int i, j;
    int positionX,positionY;


// Chargement du niveau
    if (!chargerNiveau(marioPosition->carte))
        exit(EXIT_FAILURE); // On arrête le jeu si on n'a pas pu charger le niveau
   if (!chargerNiveau(marioPosition->carteInit))
        exit(EXIT_FAILURE);

    fondEcran = evas_object_rectangle_add (evas); // création de l'objet rectangle dans l'evas
    evas_object_color_set (fondEcran,255, 255,255, 255); // couleur du rectangle
    evas_object_resize(fondEcran, LARGEUR_FENETRE, HAUTEUR_FENETRE); // taille du rectangle
    evas_object_move (fondEcran, 0, 0); // position du réctangle dans notre fenetre
    evas_object_show (fondEcran); // Mise à jour de l'écran

    marioPosition->objectif = 0;
    // Placement des objets à l'écran
    for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
        {
            positionX = i * TAILLE_BLOC;
            positionY = j * TAILLE_BLOC;

            switch (marioPosition->carte[i][j])
            {
            case MUR:
                evas_object_show (murMove(mur,evas,positionX,positionY));
                break;
            case CAISSE:
                evas_object_show (caisseMove(caisse,evas,positionX,positionY));
                break;
                evas_object_show (caisseMove(caisse,evas,positionX,positionY));
            case CAISSE_OK:
                evas_object_move (caisseOK, positionX, positionY);
                evas_object_show (caisseOK);
                break;
            case OBJECTIF:
                evas_object_show (objectifMove(objectif,evas,positionX,positionY));
                marioPosition->objectif++;
                break;
            }
        }

    }

// Recherche de la position de Mario au départ
    for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
        {
            if (marioPosition->carte[i][j] == MARIO) // Si Mario se trouve à cette position sur la carte
            {

                marioPosition->positionJoueurX  = i ;
                marioPosition->positionJoueurY = j ;
                //carte[i][j] = VIDE;
            }
        }
    }

    printf("INIT - positionX %d\n", marioPosition->positionJoueurX);
    printf("INIT - positionY %d\n", marioPosition->positionJoueurY);

    //initialisation de mario sur la postions basse
    marioPosition->mario = MarioBas(marioPosition->mario,evas,marioPosition->positionJoueurX * TAILLE_BLOC,marioPosition->positionJoueurY * TAILLE_BLOC);
    evas_object_show (marioPosition->mario); //affichage
    evas_object_focus_set(marioPosition->mario, 1);
    
 
    evas_object_event_callback_add(marioPosition->mario, EVAS_CALLBACK_KEY_DOWN, deplacer_Mario, marioPosition);
       
}


